package com.serviceprovider.business.module.sp.payee.services.dao.interfaces;

//~--- non-JDK imports --------------------------------------------------------

import com.serviceprovider.business.module.sp.payee.model.PayeeProfile;
import com.serviceprovider.business.module.sp.payee.valueobjects.PayeeSearchResultVO;
import com.serviceprovider.business.module.user.model.impl.UserSearchCriteria;

//~--- JDK imports ------------------------------------------------------------

import java.util.List;

/**
 * This class manages payee profile information.
 */
public interface IPayeeProfileService {

    /**
     * Inserts new profile to a specific payee.
     * @param payee profile to be inserted.
     * @param payeeId id of the user
     */
    void save(PayeeProfile profile, int payeeId);

    /**
     * Removes a profile from a payee.
     * @param userId id of the user which has profile to be removed.
     */
    void removeByPayeeId(int payeeId);

    /**
     * Removes a profile by its id
     * @param id id of the profile to be removed
     */
    void remove(int id);

    /**
     * Finds a profile by id.
     * @param id id of the profile.
     * @return payee profile found or null if doesn't exist.
     */
    PayeeProfile getById(int id);

    /**
     * Gets a profile of a specific payee
     * @param payeeId id of the payee
     * @return payee profile found or null if doesn't exist.
     */
    PayeeProfile getByPayee(int payeeId);

    /**
     * Gets a list of profiles based on search criteria
     * @param a search criteria
     * @return a list of user profile with transactions and orders.
     */
    List<PayeeSearchResultVO> getBySearchCriteria(UserSearchCriteria criteria);

    /**
     * Gets a list of profiles by role
     * @param roleId Role Id to filter search result
     */
    List<PayeeSearchResultVO> getByRole(int roleId);
}



